From 0144bfc9cc6c616a00a8171f3950a75ec948427e Mon Sep 17 00:00:00 2001 From: jackyzha0 Date: Sun, 11 Apr 2021 10:27:27 -0700 Subject: base next refactor --- frontend/src/pages/[hash].js | 65 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 frontend/src/pages/[hash].js (limited to 'frontend/src/pages/[hash].js') diff --git a/frontend/src/pages/[hash].js b/frontend/src/pages/[hash].js new file mode 100644 index 0000000..27f808b --- /dev/null +++ b/frontend/src/pages/[hash].js @@ -0,0 +1,65 @@ +import React, { useEffect, useState, useRef } from 'react'; +import Error from '../components/Err'; +import { Text } from '../components/Inputs'; +import CodeRenderer from '../components/renderers/Code' +import PasteInfo from '../components/PasteInfo'; +import PasswordModal from '../components/modals/PasswordModal' +import RenderDispatch from '../components/renderers/RenderDispatch' +import useFetchPaste from "../http/useFetchPaste"; + +const ViewPaste = (props) => { + const { err, requiresAuth, validPass, getWithPassword, result } = useFetchPaste(props.hash) + const {content, language, expiry, title} = result ?? {} + const [theme, setTheme] = useState('atom'); + const [isRenderMode, setIsRenderMode] = useState(false); + const [enteredPass, setEnteredPass] = useState(''); + const ErrorLabelRef = useRef(null); + + if (err) { + ErrorLabelRef.current.showMessage(err, -1) + } + + useEffect(() => { + setIsRenderMode(language === 'latex' || language === 'markdown') + }, [language]) + + function getDisplay() { + return isRenderMode ? : + } + + return ( +
+ setEnteredPass(e.target.value)} + validateCallback={getWithPassword} /> + + {getDisplay()} + setIsRenderMode(!isRenderMode)} + isRenderMode={isRenderMode} + onChange={(e) => setTheme(e.target.value)} + err={} + /> +
+ ); +} + +export default ViewPaste \ No newline at end of file -- cgit v1.2.3 From 77c061bc0b8aecce7311ce820b3401c95797a589 Mon Sep 17 00:00:00 2001 From: jackyzha0 Date: Sun, 11 Apr 2021 11:40:44 -0700 Subject: working raw paste fetch --- frontend/src/pages/[hash].js | 3 +++ 1 file changed, 3 insertions(+) (limited to 'frontend/src/pages/[hash].js') diff --git a/frontend/src/pages/[hash].js b/frontend/src/pages/[hash].js index 27f808b..5a04e31 100644 --- a/frontend/src/pages/[hash].js +++ b/frontend/src/pages/[hash].js @@ -6,6 +6,8 @@ import PasteInfo from '../components/PasteInfo'; import PasswordModal from '../components/modals/PasswordModal' import RenderDispatch from '../components/renderers/RenderDispatch' import useFetchPaste from "../http/useFetchPaste"; +import {Watermark} from "../components/Watermark"; +import ThemeProvider from "../theme/ThemeProvider"; const ViewPaste = (props) => { const { err, requiresAuth, validPass, getWithPassword, result } = useFetchPaste(props.hash) @@ -58,6 +60,7 @@ const ViewPaste = (props) => { onChange={(e) => setTheme(e.target.value)} err={} /> + ); } -- cgit v1.2.3 From 12c995b6bd501be73b60e3bae6c46c59cebef6c2 Mon Sep 17 00:00:00 2001 From: jackyzha0 Date: Sun, 11 Apr 2021 12:30:02 -0700 Subject: base resolve paste and fetch paste refactor --- frontend/src/pages/[hash].js | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) (limited to 'frontend/src/pages/[hash].js') diff --git a/frontend/src/pages/[hash].js b/frontend/src/pages/[hash].js index 5a04e31..bd7fc00 100644 --- a/frontend/src/pages/[hash].js +++ b/frontend/src/pages/[hash].js @@ -5,20 +5,40 @@ import CodeRenderer from '../components/renderers/Code' import PasteInfo from '../components/PasteInfo'; import PasswordModal from '../components/modals/PasswordModal' import RenderDispatch from '../components/renderers/RenderDispatch' -import useFetchPaste from "../http/useFetchPaste"; import {Watermark} from "../components/Watermark"; -import ThemeProvider from "../theme/ThemeProvider"; +import { useRouter } from 'next/router' +import resolvePaste from "../http/resolvePaste"; -const ViewPaste = (props) => { - const { err, requiresAuth, validPass, getWithPassword, result } = useFetchPaste(props.hash) - const {content, language, expiry, title} = result ?? {} +export async function getServerSideProps(ctx) { + const data = await resolvePaste(ctx.params.hash) + + // Pass data to the page via props + return { props: { ...data } } +} + +const ViewPaste = ({data, unauthorized, error}) => { + const router = useRouter() + const { hash } = router.query + const [clientData, setClientData] = useState(data); const [theme, setTheme] = useState('atom'); const [isRenderMode, setIsRenderMode] = useState(false); const [enteredPass, setEnteredPass] = useState(''); + const [correctPass, setCorrectPass] = useState(!unauthorized); const ErrorLabelRef = useRef(null); - if (err) { - ErrorLabelRef.current.showMessage(err, -1) + const {content, language, expiry, title} = clientData; + + if (error) { + ErrorLabelRef.current.showMessage(error, -1) + } + + const getWithPassword = (password, errorCallback) => { + resolvePaste(hash, password) + .then(resp => { + setCorrectPass(true) + setClientData(resp.data) + }) + .catch(e => errorCallback(e.response.data)) } useEffect(() => { @@ -39,8 +59,8 @@ const ViewPaste = (props) => { return (
setEnteredPass(e.target.value)} validateCallback={getWithPassword} /> @@ -51,7 +71,7 @@ const ViewPaste = (props) => { readOnly /> {getDisplay()} Date: Sun, 11 Apr 2021 12:42:42 -0700 Subject: refactor error handling in pasteinfo --- frontend/src/pages/[hash].js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'frontend/src/pages/[hash].js') diff --git a/frontend/src/pages/[hash].js b/frontend/src/pages/[hash].js index bd7fc00..6d65f3e 100644 --- a/frontend/src/pages/[hash].js +++ b/frontend/src/pages/[hash].js @@ -1,5 +1,4 @@ -import React, { useEffect, useState, useRef } from 'react'; -import Error from '../components/Err'; +import React, { useEffect, useState } from 'react'; import { Text } from '../components/Inputs'; import CodeRenderer from '../components/renderers/Code' import PasteInfo from '../components/PasteInfo'; @@ -24,13 +23,10 @@ const ViewPaste = ({data, unauthorized, error}) => { const [isRenderMode, setIsRenderMode] = useState(false); const [enteredPass, setEnteredPass] = useState(''); const [correctPass, setCorrectPass] = useState(!unauthorized); - const ErrorLabelRef = useRef(null); const {content, language, expiry, title} = clientData; - if (error) { - ErrorLabelRef.current.showMessage(error, -1) - } + const getWithPassword = (password, errorCallback) => { resolvePaste(hash, password) @@ -78,7 +74,7 @@ const ViewPaste = ({data, unauthorized, error}) => { toggleRenderCallback={() => setIsRenderMode(!isRenderMode)} isRenderMode={isRenderMode} onChange={(e) => setTheme(e.target.value)} - err={} + err={error} />
-- cgit v1.2.3 From d58c7a3ad5dc83a08e040a855f158f8c6c09e154 Mon Sep 17 00:00:00 2001 From: jackyzha0 Date: Sun, 11 Apr 2021 13:50:20 -0700 Subject: password resolution, dynamic head --- frontend/src/pages/[hash].js | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) (limited to 'frontend/src/pages/[hash].js') diff --git a/frontend/src/pages/[hash].js b/frontend/src/pages/[hash].js index 6d65f3e..f281621 100644 --- a/frontend/src/pages/[hash].js +++ b/frontend/src/pages/[hash].js @@ -7,27 +7,23 @@ import RenderDispatch from '../components/renderers/RenderDispatch' import {Watermark} from "../components/Watermark"; import { useRouter } from 'next/router' import resolvePaste from "../http/resolvePaste"; +import NextHead from "../components/NextHead"; export async function getServerSideProps(ctx) { const data = await resolvePaste(ctx.params.hash) - - // Pass data to the page via props return { props: { ...data } } } const ViewPaste = ({data, unauthorized, error}) => { const router = useRouter() const { hash } = router.query - const [clientData, setClientData] = useState(data); const [theme, setTheme] = useState('atom'); const [isRenderMode, setIsRenderMode] = useState(false); const [enteredPass, setEnteredPass] = useState(''); const [correctPass, setCorrectPass] = useState(!unauthorized); - + const [clientData, setClientData] = useState(data) const {content, language, expiry, title} = clientData; - - const getWithPassword = (password, errorCallback) => { resolvePaste(hash, password) .then(resp => { @@ -54,6 +50,7 @@ const ViewPaste = ({data, unauthorized, error}) => { return (
+ {!error && } { toggleRenderCallback={() => setIsRenderMode(!isRenderMode)} isRenderMode={isRenderMode} onChange={(e) => setTheme(e.target.value)} - err={error} + err={unauthorized ? '' : error} />
-- cgit v1.2.3